<?php
/**
 * Created by PhpStorm.
 * User: lhl
 * Date: 2020/10/12
 * Time: 14:24
 * Features: 后台service的Trait
 */

namespace app\common\traits;

use app\common\exception\CustomException;
use think\facade\Request;

Trait BaseServiceTrait
{
    //引入公共Trait
    use CommonServiceTrait;

    /**
     * 后台json输出
     * @param array $data       返回数据
     * @param bool  $is_call    是否下发了命令
     */
    public function jsonOutPut ($data = [], $is_call = false)
    {
        global $errCode;
        global $errMsg;
        //下发命令至客户端结果
        global $directiveResult;
        $msg = $is_call && $errCode == $this->CODE_SUCCESS ? '正在下发命令至客户端,若命令未生效请检查通信日志!' : '';
        $outData = [
            'code' => $errCode,
            'msg' => $errMsg . $msg,
            'request_date' => date('Y-m-d H:i:s'),
        ];

        isset($data['data']) ? $outData = array_merge($outData, $data) : $outData['data'] = $data;
        $outData['directiveResult'] = $directiveResult; //下发命令结果
        return json($outData);
    }

    /**
     * 获取后台表格每页数据量(经过了SetPageLimit中间件有效)
    */
    public function getPageLimit(){
        $limit = Request::param('pageLimit',10,'intval');
        return $limit;
    }

    /**
     * 用户强制登出
    */
    public function forcedLogout(){
        throw new CustomException('未获取到当前登录用户信息,请重新登录',Request::param('responseCode.not_login_error',103));
    }

    /**
     * 获取当前登录用户的角色id,目前只存在单角色（通过权限检测有效）
    */
    public function getLoginGroupId(){
        $groupId = Request::param('currentLoginUserInfo.rbac.roles.0.group_id');
        if(!$groupId){
            $this->forcedLogout();
        }
        return $groupId;
    }

    /**
     * 获取当前登录用户的资产组id（通过权限检测有效）
    */
    public function getLoginHostGroupId()
    {
        //当前登录用户信息
        $info = $this->getLoginUserInfo();
        if (!$info['host_group_id']) {
            throw new CustomException('您的账号尚未绑定资产组,请先绑定。（用户列表/修改用户信息）',104);
        }
        return $info['host_group_id'];
    }

    /**
     * 获取当前登录用户角色信息,目前只存在单角色（通过权限检测有效）
    */
    public function getLoginGroupInfo(){
        $group = Request::param('currentLoginUserInfo.rbac.roles.0');
        if(!$group){
            $this->forcedLogout();
        }
        return $group;
    }

    /**
     * @name: 判定登录用户的角色是不是超级管理员
     * @Param: 
     * @Description: 如果是超级管理员 返回true 如果不是返回fasle
     * @Author: foo
     * @Date: 2020-12-23 16:17:14
     */
    public function isRootRoleGroup ()
    {
        $groupInfo = $this->getLoginGroupInfo();
        return $groupInfo['is_root_group'];
    }

    /**
     * 获取当前登录用户的id（通过登录检测有效）
    */
    public function getLoginUserId(){
        $userId = Request::param('user_id');
        if(!$userId){
            $this->forcedLogout();
        }
        return $userId;
    }

    /**
     * 获取当前登录用户信息（通过权限检测有效）
    */
    public function getLoginUserInfo(){
        $info = Request::param('currentLoginUserInfo');
        if(!$info){
            $this->forcedLogout();
        }
        return $info;
    }

}